plugin @2020
- C++补全: 仍然是YCM
- 自动生成tag: vim-gutentags 或 gen_tags.vim
- 动态检查: ale(替代syntastic)
- 函数列表: LeaderF(替代 tagbar)
- 快速打开文件: LeaderF
一些基本概念
- operator(操作符): 例如命令
d
,y
,c
等; - motion(移动): 例如移动光标的命令
h j k l
,w
,e
,b
等; - text-objects(文本对象): 例如
s
(表示句子sentence),w
表示单词,p
表示段落(Paragraphs)等等。
除了hjkl这些基本命令之外, 你还要知道“更高级的”组合命令: “operator + motion” 组合的方式,例如:
ct.
将字符’.’前面的所有都删除.y^
复制到行首.
“operator + text-objects” 的命令组合方式, 例如:
ciw
: 剪切光标处单词, 不包括空格caw
: 剪切光标处单词, 包括空格dip
: 删除一段
移动光标
下上左右:JKHL
移动到上一个单词首b
移动到下一个单词首w
,移动3个单词3w
<----b w----="">----b>
w
/ b
是在单词首部移动,在单词尾部移动为ge
/ e
<----ge e----="">----ge>
如果是大写的B
,W
,gE
,E
,则只将“空格”作为单词分隔符,例如’gloal.member’被当作一个完整的词。
^
光标移动到行开头$
光标移动到行结尾fx
光标移动到下一个x处,3fx移动到第三个x处Fx
光标移动到前面的x处tx
,Tx
类似,移动到x之前ma
标记当前行, 标签可以是a-z任意字符~a
跳转到a标签
跳转到上次编辑位置: C-O
跳转到匹配的括号%
移动到文件首gg
有趣的命令: 9999k
作用也是移动到文件首
移动到文件尾G
跳转到第33行33G
或者输入 :33
也可以跳转
如移动到文档1/3处 ,直接输入33%
将当前光标所在的行移到屏幕中间 zz
当前光标所在的行移到屏幕顶,zt
助记t=top 。
当前光标所在的行移到屏幕底,zb
助记b=bottom 。
分别为移动到文档的head, middle, last的位置 H, M, L
。
向前向后翻页 C-F
, C-B
Linux 终端( Terminal)中常用的快捷键
ctrl+f 向前移动一个字符
ctrl+b 向后移动一个字符
alt+f 向前移动一个单词
alt+b 向后移动一个单词
ctrl+a 移动到当前行首
ctrl+e 移动到当前行尾
vim whith ctags
- 基于tags定义跳转:
C-]
- 在新 Window 打开tag的定义:
C-W-]
- 在新的预览 Window 里打开tag的定义:
C-W-}
- 如果tags找到多个定义, 用
g-]
可以列出所有找到的tag; - 跳转回
C-O
或C-T
或按两下~
Ctrl + 左/右键
也可以跳转/返回
CTRL-T
is working with tags stackCTRL-O
is working with jumplist
Tag stack and jumplist are different list in vim, but they might have same items when you jumping through tags (eg. usingCTRL-]
)
编辑
使用c
,d
和x
删除的字符仍然存在寄存器中,用p
可以粘贴出来。
c
= 替换(change),删除文本并进入插入模式,d
=删除(delete),一般组合使用,y
=复制(yank),p
= 粘贴(paste),x
= 删除字符;
删除,剪切, 复制一行= cc
,dd
,yy
删除,剪切, 复制多行= 3cc
,4dd
,5yy
删除,剪切, 复制到行尾= c$
,d$
,y$
或者大写C, D, Y, 也是到行尾
删除,剪切,复制到行开头= c^
,d^
,y^
或者c0
,d0
,y0
从光标开始, 删除,剪切,复制到单词尾=cw
,dw
,yw
删除,剪切,复制整个单词= daw
, caw
, yaw
注意区别yw
和yaw
, 例如光标在"test" 的e位置, yaw
复制整个单词, yw
只复制est。
tips: 重复操作的快捷键是”.”, 比如daw删除一个单词后想继续删除下一个单词,就可以按”.”
删除换行符(两行合并为一行): J
撤销上次操作(还原): u
反撤销(重做): Ctrl+r
撤销对一行的所有操作(还原一行): U
,第二次按U会撤销上一次U的操作。
只用u和C-R即可回到任何一个操作状态。
可视模式下的U/u是大小写转换。
- 光标前插入 =
i
- 光标后插入 =
a
- 行首插入 =
I
- 行尾插入 =
A
在当前行的下面另起一行,并进入插入状态o
在当前行的前面另起一行,并进入插入状态O
外部程序的粘贴&复制
GVIM的“+号寄存器”可以与外部程序复制/粘贴:
- 复制
"+y
- 粘贴
"+p
- 剪切
"+x
注: 以上快捷键在命令可视模式/模式有效,先按双引号进入寄存器模式,再按加号,然后按y/p/x
如果在插入模式, 先按ctrl+R
进入寄存器模式(会出现"
号), 再按对应的寄存器编号,系统共享寄存器编号是+号.
在VIM正常模式下,ctrl+r
是重做。
" 加入到_vimrc文件中: |
多窗口
- 关闭分屏窗口:
Ctrl+W c
或Ctrl+W q
- 上下分割窗口:
Ctrl+W s
- 左右分割窗口:
Ctrl+W v
Ctrl+w Ctrl+]
在新窗口打开定义
多文件buff操作
:E
或者:Explore
浏览目录:edit filename
编辑文件;:ls
列出所有buffer;:b 2
或:buffer 2
将切换到相关的buffer:b2
关闭buff=2的文件;:bn
删除文件缓冲(关闭文件)。zz
将当前编辑的行置于屏幕中间。ZZ
保存退出。:q!
不保存退出, :qa!
表示退出所有buff并不保存:wq
保存退出
搜索和替换
搜索
/include
正向搜索,n下一个,N上一个?include
反向搜索/\<the\>
全词匹配搜索单词"the",助记开头\<,结尾>#
号是向后搜索匹配单词,*
向前搜索匹配单词, gd
类似*号的功能.
正则搜索
/^the
搜索the开头的行(针对行,而非单词)/here$
搜索here结尾的行
点号匹配任何单字符,如果要搜索的内容本身包含点号,则用.代替,比如:/the.
搜索"the"匹配的内容/the\.
搜索"the."匹配的内容
替换
最常用的替换命令就是:%s/1/2/g
了, 其中%符号表示范围整个文件, s表示搜索, 最后的g表示全局替换.
如果要制定范围内替换, 比如在31~文件尾范围内替换: :31,$s/hello/world/gc
, 最后的c参数表示替换过程中需要确认(confirm).
可视模式
shift + v
: 行选择模式
大写V
同上
所选择区域转换为大写U
,转换为小写u
x
和d
在可视模式都是删除>
和<
在可视模式为右移,左移
列模式
Ctrl+v
(Windows上是Ctrl+Q
)进入列模式,
使用方向键或H J K L
选择行, 用c
或d
删除, shift+i插入(大写I键),
插入完成后, 按esc后生效.
代码折叠
可以zf
进行折叠, 用zo
打开折叠,也可以方向键向右打开折叠,zc
关闭折叠.
Session
Session可以保存此次编辑的状态, 比如已经打开的文件, 当前编辑位置等.
- 保存Session:
mksession session.vim
- 载入Session:
source session.vim
补全
CTRL-X CTRL-N
和CTRL-X CTRL-P
: 关键字补全CTRL-X CTRL-K
: 字典补全CTRL-X CTRL-L
: 整行补全CTRL-X CTRL-F
: 文件名补全CTRL-X CTRL-O
: OmniComplete